package com.sergio.accounting.service;

import com.sergio.accounting.entity.Account;

import java.math.BigDecimal;
import java.util.List;

/**
 * 账户服务接口
 */
public interface AccountService {

    /**
     * 获取用户的所有启用账户
     */
    List<Account> getUserAccounts(Long userId);

    /**
     * 获取用户的所有账户（包括禁用的）
     */
    List<Account> getAllUserAccounts(Long userId);

    /**
     * 根据ID获取账户
     */
    Account getAccountById(Long accountId, Long userId);

    /**
     * 创建账户
     */
    Account createAccount(Account account);

    /**
     * 更新账户
     */
    Account updateAccount(Long accountId, Account account, Long userId);

    /**
     * 删除账户
     */
    void deleteAccount(Long accountId, Long userId);

    /**
     * 启用/禁用账户
     */
    Account toggleAccountStatus(Long accountId, Long userId);

    /**
     * 获取或创建默认的"不计入账户"账户
     */
    Account getOrCreateNotCountedAccount(Long userId);

    /**
     * 更新账户余额
     */
    void updateAccountBalance(Long accountId, BigDecimal amount, boolean isIncome);

    /**
     * 获取用户总资产
     */
    BigDecimal getUserTotalBalance(Long userId);

    /**
     * 初始化用户默认账户
     */
    void initializeDefaultAccounts(Long userId);

    /**
     * 检查账户是否存在且属于指定用户
     */
    boolean existsByIdAndUserId(Long accountId, Long userId);

    /**
     * 根据ID查找账户（不验证用户）
     */
    Account findById(Long accountId);
}
